package hotel.dao;

import java.util.List;

import hotel.tipos.Servico;
import hotel.util.HibernateUtil;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

public class ServicoDao {
	public static int create(Servico svc){
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
				
				session.beginTransaction();

		        //Integer id = (Integer) session.save(svc);
				try{
					session.saveOrUpdate(svc);
				} catch (HibernateException e){
					e.printStackTrace();
					return 0;
				}
		        
		        session.getTransaction().commit();
		        
		        return 1;
			}
	
	public static int delete(Servico svc){
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
				
				session.beginTransaction();

				/*
				String query = new String("delete from Servico where serviceId = :desc");
				Query q = session.createQuery(query);
				q.setInteger("desc",svc.getServiceId());
				q.executeUpdate();
				
				session.getTransaction().commit();
				return 0;
				*/
				
				
		        //Integer id = (Integer) session.save(svc);
				
				// System.out.println("Dados: "+svc.getServiceId());
				
				List<Servico> l = buscarServicoId(svc.getServiceId());
				try{
					session.delete(l.get(0));
				} catch (HibernateException e){
					e.printStackTrace();
					return 0;
				}
		        
		        session.getTransaction().commit();
		        
		        return 1;
		        
			}
	
	@SuppressWarnings("unchecked")
	public static List<Servico> listarServicos() {
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		// Cria uma lista para retornar
		List<Servico> servicos = null;
		
		try{
			servicos = session.createQuery("from Servico").list();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return servicos;
	}
	
	/**
	 * Busca serviço baseado na descrição
	 * @param str Descriçao ou parte da descrição do Serviço
	 * @return Lista de serviços encontrada baseado na descrição
	 */
	@SuppressWarnings("unchecked")
	public static List<Servico> buscarServico(String str){
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		// Cria uma lista para retornar
		List<Servico> servicos = null;
		
		String query = new String("select s from Servico s where s.descricao like :desc");
		Query q = session.createQuery(query);
		q.setString("desc","%"+str.trim()+"%");
		
		servicos = q.list();

		
		return servicos;
	}
	
	@SuppressWarnings("unchecked")
	public static List<Servico> buscarServicoId(int id){
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		// Cria uma lista para retornar
		List<Servico> servicos = null;
		
		String query = new String("select s from Servico s where s.serviceId = :id");
		Query q = session.createQuery(query);
		q.setInteger("id",id);
		
		servicos = q.list();

		
		return servicos;
	}
}
